Entity এবং Table Mapping

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA)
280

স্প্রিং বুট জেপিএ (Spring Boot JPA) হল স্প্রিং ফ্রেমওয়ার্কের একটি শক্তিশালী অংশ যা Java Persistence API (JPA) এর মাধ্যমে ডাটাবেসের সাথে ইন্টিগ্রেটেড কাজ করতে সক্ষম। Entity এবং Table Mapping হল JPA এর মূল অংশ, যা ডাটাবেস টেবিলের সাথে জাভা ক্লাসের সংযোগ তৈরি করে। এই টেবিল এবং এনটিটি ম্যাপিংয়ের মাধ্যমে আপনি ডাটাবেস অপারেশন (CRUD) সহজে করতে পারেন।

JPA এর মাধ্যমে Entity এবং Table Mapping-এ একটি জাভা ক্লাসকে ডাটাবেস টেবিলের সাথে সম্পর্কিত করা হয়। এই সম্পর্কটি মূলত @Entity অ্যানোটেশন দ্বারা প্রতিষ্ঠিত হয় এবং @Table অ্যানোটেশন ব্যবহার করে টেবিলের নাম কনফিগার করা হয়।


১. Entity অ্যানোটেশন

@Entity অ্যানোটেশন দ্বারা একটি ক্লাসকে JPA Entity হিসেবে চিহ্নিত করা হয়, যার ফলে এটি ডাটাবেস টেবিলের সাথে সম্পর্কিত হয়। এই ক্লাসের প্রতিটি অবজেক্ট একটি রেকর্ড বা রো হিসেবে ডাটাবেসে সংরক্ষিত হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private String department;

    // getters and setters
}

এখানে, Employee ক্লাস একটি Entity হিসেবে চিহ্নিত করা হয়েছে, এবং id ফিল্ডটি ক্লাসের প্রাথমিক কী (Primary Key) হিসেবে ব্যবহৃত হচ্ছে।


২. Table অ্যানোটেশন

@Table অ্যানোটেশন ব্যবহার করে আপনি JPA Entity ক্লাসটি কোন টেবিলের সাথে ম্যাপ করতে চান তা নির্ধারণ করতে পারেন। যদি @Table অ্যানোটেশন ব্যবহার না করা হয়, তবে ডিফল্টভাবে Entity ক্লাসের নামটাই টেবিলের নাম হিসেবে ধরে নেওয়া হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "employee_details")
public class Employee {

    @Id
    private Long id;
    private String name;
    private String department;

    // getters and setters
}

এখানে, Employee ক্লাসটি employee_details নামক টেবিলের সাথে ম্যাপ করা হয়েছে। যদি @Table অ্যানোটেশনটি বাদ দেওয়া হয়, তবে স্প্রিং বুট ডিফল্টভাবে Employee টেবিলের নাম হিসেবে ব্যবহার করবে।


৩. Primary Key এবং @Id

প্রত্যেকটি Entity ক্লাসে অন্তত একটি প্রাথমিক কী (Primary Key) থাকতে হবে। এই প্রাথমিক কী নির্ধারণ করতে @Id অ্যানোটেশন ব্যবহার করা হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id; // Primary Key
    private String name;
    private String department;

    // getters and setters
}

এখানে, id ফিল্ডটি প্রাথমিক কী হিসেবে ব্যবহৃত হচ্ছে, যা ডাটাবেস টেবিলের প্রতিটি রেকর্ডকে অনন্যভাবে চিহ্নিত করবে।


৪. Column Mapping

JPA Entity ক্লাসের প্রতিটি ফিল্ড একটি কলামে ম্যাপ হয়। যদি কোনো ফিল্ডের নাম টেবিলের কলামের নামের সাথে মেলে না, তবে @Column অ্যানোটেশন ব্যবহার করে আপনি কলামের নাম নির্ধারণ করতে পারেন।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;

@Entity
public class Employee {

    @Id
    private Long id;

    @Column(name = "emp_name")
    private String name;

    @Column(name = "emp_department")
    private String department;

    // getters and setters
}

এখানে, name ফিল্ডটি emp_name কলামে এবং department ফিল্ডটি emp_department কলামে ম্যাপ করা হয়েছে। যদি আপনি @Column ব্যবহার না করেন, তবে ডিফল্টভাবে ফিল্ডের নাম কলামের নাম হিসেবে ব্যবহৃত হবে।


৫. Entity Relationships

JPA আপনাকে একাধিক Entity ক্লাসের মধ্যে সম্পর্ক তৈরি করতে দেয়, যেমন One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many

উদাহরণ - One-to-Many Relationship:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.List;

@Entity
public class Department {

    @Id
    private Long id;
    private String name;

    @OneToMany(mappedBy = "department")
    private List<Employee> employees;

    // getters and setters
}

এখানে, Department Entity তে একটি One-to-Many সম্পর্ক তৈরি করা হয়েছে যেখানে একাধিক Employee ডিপার্টমেন্টের অংশ হতে পারে।

উদাহরণ - Many-to-One Relationship:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;

    @ManyToOne
    private Department department;

    // getters and setters
}

এখানে, Employee Entity তে একটি Many-to-One সম্পর্ক তৈরি করা হয়েছে, যেখানে অনেক Employee একটি Department এর অধীনে কাজ করতে পারে।


৬. Generating Database Schema

স্প্রিং বুট অ্যাপ্লিকেশন চলানোর সময় JPA আপনার Entity ক্লাসগুলো থেকে ডাটাবেস স্কিমা অটোমেটিক্যালি তৈরি করতে পারে। এটি spring.jpa.hibernate.ddl-auto প্রোপার্টি ব্যবহার করে কনফিগার করা হয়। এর কয়েকটি মান হতে পারে:

  • none: কোনো ডাটাবেস পরিবর্তন করবে না।
  • update: ডাটাবেস স্কিমা আপডেট করবে।
  • create: ডাটাবেস স্কিমা তৈরি করবে (প্রতিবার অ্যাপ্লিকেশন চালানোর সময়)।
  • create-drop: অ্যাপ্লিকেশন শুরু হওয়ার সময় স্কিমা তৈরি করবে এবং শেষ হওয়ার সময় ডিলিট করবে।

উদাহরণ:

spring.jpa.hibernate.ddl-auto=update

এখানে, স্প্রিং বুট অ্যাপ্লিকেশন চালানোর সময় ডাটাবেসের স্কিমা আপডেট হবে।


সারাংশ

স্প্রিং বুট জেপিএ (Spring Boot JPA) ব্যবহার করে Entity এবং Table Mapping একটি খুবই শক্তিশালী এবং সুবিধাজনক প্রক্রিয়া যা ডাটাবেস টেবিলের সাথে সম্পর্কিত জাভা ক্লাস তৈরি করতে সাহায্য করে। @Entity অ্যানোটেশন দ্বারা ক্লাসকে ডাটাবেস টেবিলের সাথে ম্যাপ করা হয়, এবং @Table অ্যানোটেশন ব্যবহার করে টেবিলের নাম নির্ধারণ করা হয়। এছাড়াও, @Id, @Column, এবং সম্পর্কিত অ্যানোটেশনগুলি ব্যবহার করে আপনি টেবিলের কলাম ও সম্পর্ক নির্ধারণ করতে পারেন। JPA Entity এর মাধ্যমে আপনি সহজেই ডাটাবেসের সাথে কাজ করতে পারেন এবং স্প্রিং বুট কনফিগারেশন দিয়ে ডাটাবেস স্কিমা অটোমেটিক্যালি তৈরি বা আপডেট করতে পারেন।

Content added By

Entity কি এবং এটি কিভাবে Table এর সাথে Mapping করে

323

Entity হল একটি জাভা ক্লাস যা ডেটাবেসের একটি টেবিলের সাথে ম্যাপ করা হয়। JPA (Java Persistence API)-তে Entity ক্লাসগুলি ডেটাবেস টেবিলের রেকর্ডগুলির জন্য জাভা অবজেক্ট তৈরি করে এবং এটি ORM (Object-Relational Mapping) প্রযুক্তি ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে। স্প্রিং বুট JPA ব্যবহারের সময়, @Entity অ্যানোটেশন ব্যবহার করে আপনি একটি ক্লাসকে Entity হিসেবে চিহ্নিত করেন, এবং JPA সিস্টেম ঐ Entity ক্লাসের সাহায্যে টেবিলের ডেটা ম্যানেজ করে।

Entity এর মৌলিক ধারণা

একটি Entity ক্লাস জাভাতে একটি ক্লাস যা @Entity অ্যানোটেশন দ্বারা চিহ্নিত করা হয় এবং এটি ডেটাবেস টেবিলের সাথে সম্পর্কযুক্ত থাকে। প্রতিটি Entity ক্লাসের একটি primary key থাকে, যা ঐ টেবিলের প্রতিটি রেকর্ডকে অনন্যভাবে চিহ্নিত করে। Entity ক্লাসের ফিল্ডগুলি ডেটাবেস টেবিলের কলামের সাথে সম্পর্কিত থাকে।

স্প্রিং বুট JPA Hibernate বা অন্য কোন JPA প্রোভাইডার ব্যবহার করে Entity ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করে।


Entity Class এবং Table Mapping

স্প্রিং বুট JPA ব্যবহারে Entity ক্লাস একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং JPA স্বয়ংক্রিয়ভাবে Entity ক্লাসের ফিল্ডগুলোকে টেবিলের কলাম হিসেবে ম্যাপ করে। এই ম্যাপিং @Entity, @Id, @Column ইত্যাদি অ্যানোটেশন ব্যবহার করে করা হয়।


Entity Class তৈরি এবং Table Mapping উদাহরণ

ধরা যাক, আমরা একটি Product টেবিল তৈরি করতে চাই যেখানে Product এর id, name, এবং price থাকবে।

1. Entity Class তৈরি করা

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;

@Entity  // Marks the class as a JPA entity
public class Product {

    @Id  // Marks this field as the primary key
    private Long id;

    @Column(name = "name")  // Maps the 'name' field to the 'name' column in the database
    private String name;

    @Column(name = "price")  // Maps the 'price' field to the 'price' column in the database
    private Double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

ব্যাখ্যা:

  • @Entity: এটি ক্লাসটিকে JPA Entity হিসেবে চিহ্নিত করে, যার মাধ্যমে এটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে।
  • @Id: এটি Entity ক্লাসের primary key চিহ্নিত করে।
  • @Column: এই অ্যানোটেশনটি ব্যবহার করা হয় ডেটাবেস টেবিলের কলামের সাথে Entity ক্লাসের ফিল্ড ম্যাপ করতে।

Entity Table Mapping অটোমেটিক

স্প্রিং বুট JPA দ্বারা Entity ক্লাসের ফিল্ড গুলো ডেটাবেস টেবিলের কলামের সাথে স্বয়ংক্রিয়ভাবে ম্যাপ হয়ে যায়, তবে আপনি চাইলে @Column অ্যানোটেশন দিয়ে কাস্টম কলাম নাম এবং অন্যান্য বৈশিষ্ট্য নির্ধারণ করতে পারেন।

2. ডেটাবেস টেবিলের সাথে Entity ক্লাস Mapping

এখন স্প্রিং বুট JPA আপনাকে Hibernate ব্যবহার করে ডেটাবেস টেবিল তৈরি করতে সহায়তা করবে। টেবিলটির নাম সাধারণত Entity ক্লাসের নামের সাথে সম্পর্কিত থাকে, তবে আপনি @Table অ্যানোটেশন ব্যবহার করে কাস্টম টেবিল নামও নির্ধারণ করতে পারেন।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "products")  // Mapping to the 'products' table in the database
public class Product {

    @Id
    private Long id;

    private String name;
    private Double price;

    // Getters and setters
}

ব্যাখ্যা:

  • @Table(name = "products"): এটি ডেটাবেসে টেবিলের নাম products সেট করে, যেখানে Entity মডেলটির ডেটা সঞ্চিত হবে।

Entity Class এবং Table Mapping কনফিগারেশন

স্প্রিং বুট JPA এর সাহায্যে Entity ক্লাস এবং Table এর ম্যাপিং স্বয়ংক্রিয়ভাবে ডেটাবেসে চলে আসে, তবে কিছু কনফিগারেশন পরিবর্তন করলে আপনি DDL অটোমেটিকালি জেনারেট করতে পারেন।

3. application.properties ফাইলে কনফিগারেশন

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

ব্যাখ্যা:

  • spring.jpa.hibernate.ddl-auto=update: এই কনফিগারেশনটি Hibernate কে নির্দেশ দেয় যে ডেটাবেসের স্কিমা আপডেট করা উচিত যদি Entity ক্লাসের সাথে কোনো পরিবর্তন হয়।
  • spring.jpa.show-sql=true: Hibernate-generated SQL কুয়েরিগুলি কনসোলে প্রদর্শন করতে সহায়তা করে।

Entity এবং Table Mapping এর অন্যান্য অ্যানোটেশন

  1. @GeneratedValue: প্রাইমারি কিলামের জন্য অটোমেটিক ভ্যালু জেনারেট করতে ব্যবহৃত হয়।

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
  2. @OneToMany, @ManyToOne, @OneToOne, @ManyToMany: এই অ্যানোটেশনগুলো ব্যবহার করে আপনি বিভিন্ন Entity গুলোর মধ্যে সম্পর্ক (Relationship) গড়ে তুলতে পারেন, যেমন এক থেকে অনেক (OneToMany) অথবা অনেক থেকে এক (ManyToOne) সম্পর্ক।

    @OneToMany(mappedBy = "product")
    private List<Order> orders;
    
  3. @Transient: যদি কোনো ফিল্ডকে ডেটাবেস টেবিলের সাথে ম্যাপ না করতে চান, তাহলে @Transient অ্যানোটেশন ব্যবহার করা হয়।

    @Transient
    private String temporaryField;
    

উপসংহার

Entity ক্লাস জাভাতে ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং স্প্রিং বুট JPA-এর মাধ্যমে ORM (Object-Relational Mapping) প্রক্রিয়া সম্পন্ন হয়। JPA Entity ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয় @Entity, @Table, @Id, @Column এবং অন্যান্য অ্যানোটেশন ব্যবহার করে। স্প্রিং বুট JPA ডেটাবেসে CRUD অপারেশন সহজ করে তোলে এবং উন্নত কনফিগারেশন ফিচার সরবরাহ করে, যা ডেটাবেস ইন্টিগ্রেশন আরও কার্যকরী ও সহজ করে তোলে।

Content added By

@Entity, @Table, @Id, এবং @Column অ্যানোটেশন এর ব্যবহার

238

Spring Boot JPA-তে JPA (Java Persistence API) সম্পর্কিত অ্যানোটেশনগুলো ব্যবহৃত হয়, যা ডাটাবেসের সাথে অবজেক্ট ম্যাপিং করতে সাহায্য করে। এই অ্যানোটেশনগুলো Spring Boot অ্যাপ্লিকেশনের মধ্যে ORM (Object-Relational Mapping) প্রক্রিয়াটি সঞ্চালন করে, যেখানে Java অবজেক্টগুলোকে ডাটাবেস টেবিলের সঙ্গে সম্পর্কিত করা হয়।

এখানে আমরা @Entity, @Table, @Id, এবং @Column অ্যানোটেশনগুলোর ব্যবহার আলোচনা করব এবং দেখাবো কীভাবে এগুলো JPA-তে কার্যকরীভাবে ব্যবহার করা যায়।


1. @Entity

@Entity অ্যানোটেশনটি JPA-এর একটি গুরুত্বপূর্ণ অ্যানোটেশন যা একটি ক্লাসকে ডাটাবেস টেবিলের সাথে ম্যাপ করে। এটি Spring Beans-এ নির্দিষ্ট ক্লাসকে Entity হিসেবে চিহ্নিত করে, যা Spring JPA-এর মাধ্যমে ডাটাবেস টেবিলের প্রতিনিধিত্ব করে।

  • @Entity ব্যবহার করলে Spring Data JPA ঐ ক্লাসটিকে ডাটাবেস টেবিলের একটি রেকর্ড হিসাবে দেখবে।
  • প্রতিটি Entity একটি ডাটাবেস টেবিলের সাথে সম্পর্কিত থাকে।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
    
    // Getter এবং Setter
}

এখানে, User ক্লাসটি @Entity অ্যানোটেশন ব্যবহার করে ডাটাবেস টেবিলের প্রতিনিধিত্ব করছে। @Id অ্যানোটেশনটি ব্যবহার করে id প্রপার্টিকে টেবিলের প্রাইমারি কী হিসেবে চিহ্নিত করা হয়েছে।


2. @Table

@Table অ্যানোটেশনটি JPA-তে একটি Entity ক্লাসকে একটি নির্দিষ্ট ডাটাবেস টেবিলের সাথে সম্পর্কিত করতে ব্যবহৃত হয়। যদি আপনি @Entity অ্যানোটেশন ব্যবহার করেন, তবে ডিফল্টভাবে Entity ক্লাসের নামটি টেবিলের নাম হিসাবে নেওয়া হয়, তবে আপনি @Table অ্যানোটেশন ব্যবহার করে টেবিলের নাম কাস্টমাইজ করতে পারেন।

  • @Table(name="table_name") টেবিলের নাম নির্দিষ্ট করার জন্য ব্যবহৃত হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;

@Entity
@Table(name = "users")
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
    
    // Getter এবং Setter
}

এখানে, @Table(name = "users") ব্যবহার করে Entity ক্লাসটি users নামের টেবিলের সাথে সম্পর্কিত করা হয়েছে।


3. @Id

@Id অ্যানোটেশনটি JPA Entity ক্লাসের মধ্যে প্রাইমারি কী (primary key) চিহ্নিত করতে ব্যবহৃত হয়। এটি ডাটাবেস টেবিলের ওই কলামকে নির্ধারণ করে যা ইউনিক রেকর্ডগুলোকে চিহ্নিত করবে।

  • @Id একটি Entity ক্লাসের প্রপার্টি (field) কে প্রাইমারি কী হিসেবে চিহ্নিত করে।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id; // Primary key

    private String name;
    private String email;
    
    // Getter এবং Setter
}

এখানে, id প্রপার্টি @Id অ্যানোটেশন ব্যবহার করে User Entity-র প্রাইমারি কী হিসাবে চিহ্নিত করা হয়েছে।


4. @Column

@Column অ্যানোটেশনটি JPA-তে একটি Entity ক্লাসের ফিল্ড বা প্রপার্টিকে ডাটাবেস টেবিলের কলামের সাথে সম্পর্কিত করতে ব্যবহৃত হয়। এটি টেবিলের কলামের নাম, ডাটা টাইপ, দৈর্ঘ্য ইত্যাদি কাস্টমাইজ করতে সহায়তা করে।

  • @Column(name="column_name") কলামের নাম নির্দিষ্ট করতে ব্যবহার করা হয়।
  • @Column(nullable=false) কলামটি null হতে পারবে না, এটি নির্ধারণ করতে ব্যবহৃত হয়।
  • @Column(length=255) কলামের সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করতে ব্যবহৃত হয়।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;

@Entity
public class User {

    @Id
    private Long id;

    @Column(name = "user_name", nullable = false, length = 100)
    private String name;

    @Column(name = "user_email", unique = true)
    private String email;
    
    // Getter এবং Setter
}

এখানে, @Column(name = "user_name", nullable = false, length = 100) এবং @Column(name = "user_email", unique = true) ব্যবহার করে Entity ক্লাসের name এবং email প্রপার্টিগুলোর সাথে ডাটাবেস টেবিলের কলাম সম্পর্কিত করা হয়েছে। user_name কলামের জন্য এটি null হতে পারবে না এবং তার দৈর্ঘ্য 100 অক্ষর হবে। user_email কলামটি unique হিসাবে চিহ্নিত করা হয়েছে।


Conclusion

@Entity, @Table, @Id, এবং @Column অ্যানোটেশনগুলি Spring Boot JPA-তে খুবই গুরুত্বপূর্ণ। এগুলি ব্যবহৃত হয়:

  • @Entity দ্বারা ক্লাসটিকে ডাটাবেস টেবিলের সাথে সম্পর্কিত করা হয়।
  • @Table অ্যানোটেশন দ্বারা Entity ক্লাসের জন্য টেবিলের নাম নির্ধারণ করা যায়।
  • @Id দ্বারা Entity ক্লাসের প্রাইমারি কী চিহ্নিত করা হয়।
  • @Column দ্বারা Entity ফিল্ডের সাথে ডাটাবেস টেবিলের কলাম সম্পর্কিত করা হয় এবং কলামের বৈশিষ্ট্য কাস্টমাইজ করা হয়।

এই অ্যানোটেশনগুলির মাধ্যমে Spring Boot JPA আপনাকে ডাটাবেস টেবিলের সাথে অবজেক্ট সম্পর্কিত করতে সাহায্য করে, এবং ORM (Object-Relational Mapping) এর সুবিধা প্রদান করে যা ডাটাবেস অপারেশনগুলোকে আরও সহজ এবং কার্যকরী করে তোলে।


Content added By

Primary Key এবং Auto Increment Field তৈরি করা

260

Primary Key এবং Auto Increment Field এর ধারণা

Primary Key (প্রাথমিক কী): ডেটাবেসের একটি টেবিলের মধ্যে প্রতিটি রেকর্ড বা রোকে ইউনিকভাবে শনাক্ত করতে Primary Key ব্যবহৃত হয়। এটি একটি কলাম বা কলাম সমষ্টি যা এককভাবে প্রতিটি রেকর্ডকে অন্য রেকর্ডের থেকে আলাদা করে।

Auto Increment Field: এটি একটি ডেটাবেস ফিচার, যা একটি টেবিলের প্রাথমিক কী বা অন্য কোনো কলামের মান অটোমেটিক্যালি বাড়িয়ে দেয়। সাধারণত, এটি Integer বা Long টাইপের ফিল্ড হিসেবে ব্যবহার করা হয় এবং এতে ডেটাবেস নিজেই নতুন রেকর্ড তৈরি করার সময় মান বাড়িয়ে দেয়।

স্প্রিং বুট জেপিএ (Spring Boot JPA) ব্যবহার করার সময়, Primary Key এবং Auto Increment ফিল্ড তৈরি করতে @Id এবং @GeneratedValue অ্যানোটেশন ব্যবহার করা হয়।


Primary Key এবং Auto Increment Field তৈরি করার জন্য JPA Configuration

১. Entity Class তৈরি করা

প্রথমে, একটি Entity class তৈরি করতে হবে। Entity class হচ্ছে সেই জাভা ক্লাস যা ডেটাবেস টেবিলের সঙ্গে সম্পর্কিত থাকে।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Auto Increment
    private Long id;

    private String name;
    private int age;

    // Getters and Setters
}

ব্যাখ্যা:

  • @Entity: এই অ্যানোটেশনটি নির্দেশ করে যে এই ক্লাসটি একটি JPA Entity যা ডেটাবেস টেবিলের সাথে সম্পর্কিত।
  • @Id: এটি প্রাথমিক কী (Primary Key) হিসেবে মার্ক করে।
  • @GeneratedValue(strategy = GenerationType.IDENTITY): এই অ্যানোটেশনটি Auto Increment ফিল্ড তৈরি করে। GenerationType.IDENTITY ডেটাবেসে একটি কলামের মান অটোমেটিক্যালি বাড়িয়ে দেয়, সাধারণত এটি MySQL বা PostgreSQL এর মতো ডেটাবেসে কাজ করে।

GenerationType.IDENTITY এর অর্থ হলো ডেটাবেসের নিজস্ব অটোমেটিক ইনক্রিমেন্ট সিস্টেম ব্যবহার করা। ডেটাবেসে একটি নতুন রেকর্ড ইনসার্ট করার সময়, id ফিল্ডের মান অটোমেটিক্যালি বাড়ানো হবে।

২. Repository Interface তৈরি করা

JPA Repository তৈরি করার জন্য, JpaRepository ইন্টারফেস ব্যবহার করা হয়, যা স্প্রিং ডেটা জেপিএর একটি প্রধান অংশ। এটি ডেটাবেসের CRUD অপারেশনগুলির জন্য প্রস্তুত।

import org.springframework.data.jpa.repository.JpaRepository;

public interface PersonRepository extends JpaRepository<Person, Long> {
    // Custom query methods can be added here if needed
}

ব্যাখ্যা:

  • JpaRepository: এটি স্প্রিং ডেটা জেপিএ এর একটি ইন্টারফেস, যা ডেটাবেসের জন্য সহজে CRUD অপারেশন করতে সাহায্য করে। এখানে Person হলো Entity ক্লাস এবং Long হলো প্রাথমিক কী (Primary Key) এর টাইপ।

৩. Spring Boot Application Class

স্প্রিং বুট অ্যাপ্লিকেশন ক্লাস তৈরি করা যেখানে PersonRepository ইনজেক্ট করা হবে এবং এর মাধ্যমে ডেটাবেসের অপারেশন করা হবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootJpaApplication implements CommandLineRunner {

    @Autowired
    private PersonRepository personRepository;

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJpaApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // Creating new Person entity
        Person person = new Person();
        person.setName("John Doe");
        person.setAge(30);

        // Saving the Person entity to the database
        personRepository.save(person);

        System.out.println("Person saved: " + person.getName() + " with ID: " + person.getId());
    }
}

ব্যাখ্যা:

  • @Autowired: এটি PersonRepository বীনের ইনজেকশন নিশ্চিত করে, যাতে personRepository.save(person) মাধ্যমে Person Entity ডেটাবেসে সেভ করা যায়।
  • CommandLineRunner: স্প্রিং বুট অ্যাপ্লিকেশন চালানোর পরে run() মেথডটি কল হয়, যেখানে আমরা একটি নতুন Person অবজেক্ট তৈরি করি এবং এটি ডেটাবেসে সেভ করি।

৪. application.properties কনফিগারেশন

স্প্রিং বুট অ্যাপ্লিকেশনে ডেটাবেস কনফিগারেশন প্রয়োজন। application.properties ফাইলে নিম্নলিখিত কনফিগারেশন যোগ করুন:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

এখানে:

  • spring.datasource.url: ডেটাবেসের URL।
  • spring.datasource.username: ডেটাবেস ইউজারনেম।
  • spring.datasource.password: ডেটাবেস পাসওয়ার্ড।
  • spring.jpa.hibernate.ddl-auto: এটি স্প্রিং হাইবারনেটের মাধ্যমে ডেটাবেসের স্কিমা আপডেট করার কৌশল (যেমন, update, create, create-drop) নির্ধারণ করে।
  • spring.jpa.show-sql: SQL কোয়েরি দেখানোর জন্য true সেট করা হয়।

সারাংশ

স্প্রিং বুট জেপিএ (Spring Boot JPA) ব্যবহারে, Primary Key এবং Auto Increment ফিল্ড তৈরি করা খুব সহজ। @Id অ্যানোটেশন প্রাথমিক কী হিসেবে কাজ করে এবং @GeneratedValue(strategy = GenerationType.IDENTITY) অ্যানোটেশনটি ডেটাবেসে অটোমেটিক ইনক্রিমেন্ট ফিচারটি সক্রিয় করে। এর মাধ্যমে, স্প্রিং বুট জেপিএ ডেটাবেসে রেকর্ড ইনসার্ট করার সময় নতুন রেকর্ডের প্রাথমিক কী নিজেই বৃদ্ধি করে। এই পদ্ধতিটি ডেটাবেসের প্রতি ব্যবহারের নমনীয়তা এবং পারফরম্যান্স উন্নত করতে সাহায্য করে।

Content added By

উদাহরণ সহ Entity এবং Table Mapping

289

Entity এবং Table Mapping কি?

Entity হল একটি Java ক্লাস যা JPA এর মাধ্যমে ডাটাবেস টেবিলের সাথে ম্যাপ করা হয়। JPA ডাটাবেসের টেবিলের প্রতিটি রেকর্ডকে Entity অবজেক্ট হিসেবে রিপ্রেজেন্ট করে।

Table Mapping হল Entity ক্লাস এবং ডাটাবেস টেবিলের মধ্যে সম্পর্ক তৈরি করার প্রক্রিয়া। Spring Boot এবং JPA তে এই সম্পর্কটি @Entity এবং @Table অ্যানোটেশন ব্যবহার করে তৈরি করা হয়।

  • @Entity: একটি ক্লাসকে Entity হিসেবে চিহ্নিত করার জন্য ব্যবহৃত হয়।
  • @Table: Entity ক্লাসকে নির্দিষ্ট টেবিলের সাথে মেপিং করতে ব্যবহৃত হয় (যদি টেবিলের নাম Entity ক্লাসের নামের সাথে মিলে না থাকে)।

Entity এবং Table Mapping এর উদাহরণ

ধরা যাক, আমাদের একটি Employee Entity আছে, যা ডাটাবেসে employee টেবিলের সাথে মাপ করা হবে।

১. Entity ক্লাস তৈরি করা

Employee.java (Entity Class)

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Table;

@Entity
@Table(name = "employee") // Optional if class name matches table name
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String department;

    // Default constructor
    public Employee() {}

    // Parameterized constructor
    public Employee(String name, String department) {
        this.name = name;
        this.department = department;
    }

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

এখানে, @Entity অ্যানোটেশন ক্লাসটিকে JPA Entity হিসেবে চিহ্নিত করছে এবং @Table(name = "employee") অ্যানোটেশন দ্বারা employee টেবিলের সাথে Entity ক্লাসের সম্পর্ক তৈরি করা হয়েছে।

২. Repository Interface তৈরি করা

Spring Data JPA এর মাধ্যমে Employee Entity এর জন্য JpaRepository ব্যবহার করতে হবে, যা স্বয়ংক্রিয়ভাবে CRUD অপারেশন করবে।

EmployeeRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    // Custom query methods can be defined here
}

এখানে, JpaRepository ইন্টারফেস Employee Entity-র জন্য CRUD অপারেশন সরবরাহ করে।

৩. Spring Boot অ্যাপ্লিকেশন তৈরি করা

এখন, Spring Boot অ্যাপ্লিকেশন তৈরি করতে হবে, যেখানে EmployeeController ব্যবহার করা হবে EmployeeService এর মাধ্যমে Employee Entity থেকে ডেটা পরিচালনা করার জন্য।

EmployeeService.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }

    public Employee getEmployeeById(Long id) {
        return employeeRepository.findById(id).orElse(null);
    }

    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }
}

EmployeeController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @PostMapping
    public Employee createEmployee(@RequestBody Employee employee) {
        return employeeService.saveEmployee(employee);
    }

    @GetMapping("/{id}")
    public Employee getEmployeeById(@PathVariable Long id) {
        return employeeService.getEmployeeById(id);
    }

    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }
}

Application.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Spring Boot Configuration (application.properties)

application.properties

# JPA & Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

এখানে, application.properties ফাইলে H2 ইন-মেমরি ডাটাবেস কনফিগারেশন করা হয়েছে। আপনি যদি অন্য কোন ডাটাবেস ব্যবহার করতে চান, যেমন MySQL, PostgreSQL ইত্যাদি, তাহলে সেই অনুযায়ী কনফিগারেশন করতে হবে।


সারাংশ

Spring Boot এবং JPA এর মাধ্যমে Entity এবং Table Mapping খুব সহজে করা যায়। @Entity অ্যানোটেশন Entity ক্লাস তৈরি করার জন্য এবং @Table অ্যানোটেশন দিয়ে Entity কে ডাটাবেস টেবিলের সাথে মেপিং করা হয়। Spring Data JPA এর JpaRepository ইন্টারফেস ব্যবহার করে CRUD অপারেশন সহজে সম্পাদন করা যায়। Spring Boot কনফিগারেশন এবং JPA Entity মডেল ব্যবহার করে আপনি খুব দ্রুত এবং সহজে ডেটাবেসের সাথে কাজ করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...